package ade.prime.activity.adapter;

import java.util.ArrayList;
import java.util.List;

import ade.prime.activity.R;
import ade.prime.model.AdeWebOptions;
import ade.prime.model.Lesson;
import android.app.Activity;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class ListLessonDetailsAdapter extends BaseAdapter {
	
	public static final String DATE_FORMAT = "EEEE dd MMMM" ; //$NON-NLS-1$

	protected Activity activity ;
	
	private Lesson lesson;

	private LayoutInflater inflater ;

	protected List<Item> items ;

	protected boolean useColor ;
	
	/**
	 * @param activity
	 */
	public ListLessonDetailsAdapter(Activity activity, Lesson lesson) {
		super();
		this.activity = activity ;
		this.lesson = lesson;
		this.inflater = LayoutInflater.from(activity) ;
		this.items = new ArrayList<ListLessonDetailsAdapter.Item>() ;
    	
		//Récupére les préférences de l'utilisateur
		this.useColor = AdeWebOptions.useAdeWebColors(activity) ;
		//Initialise les différents Items
		this.init();
	}// ListLessonAdapter(Activity)

	/**
	 * {@inheritDoc}
	 * @see android.widget.Adapter#getCount()
	 */
	@Override
	public int getCount() {
		return this.items.size() ;
	}// getCount()

	/**
	 * {@inheritDoc}
	 * @see android.widget.Adapter#getItem(int)
	 */
	@Override
	public String getItem(int position) {
		return this.items.get(position).getInfo() ;
	}// getItem(int)

	/**
	 * {@inheritDoc}
	 * @see android.widget.Adapter#getItemId(int)
	 */
	@Override
	public long getItemId(int position) {
		return position ;
	}// getItemId(int)

	/**
	 * {@inheritDoc}
	 * @see android.widget.Adapter#getView(int, android.view.View, android.view.ViewGroup)
	 */
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		return this.items.get(position).getView(this.inflater, null) ;
	}// getView(int, View, ViewGroup)

	/**
	 * {@inheritDoc}
	 * @see android.widget.BaseAdapter#areAllItemsEnabled()
	 */
	@Override
	public boolean areAllItemsEnabled() {
		return false ;
	}// areAllItemsEnabled()
	
	/**
	 * {@inheritDoc}
	 * @see android.widget.BaseAdapter#isEnabled(int)
	 */
	@Override
	public boolean isEnabled(int position) {
		return this.items.get(position).isEnabled() ;
	}// isEnabled(int)
	
    /**
     * Initialise la vue avec les valeurs de l'emploi du temps courant.
     */
    public void init() {
    	this.items.clear() ;
           	
    	//Bandeau de couleur du cours (uniquement si l'utilisateur utilise les couleurs ADEWEB)
    	if(this.useColor){
    		this.items.add(new ColorItem(this.lesson.getColor()));
    	}
        //Nom du cours
    	this.items.add(new TitleItem("Cours")) ;
    	this.items.add(new InfoItem(this.lesson.getTitle(), "",0,false)) ;
        //Date du cours
    	this.items.add(new TitleItem("Date")) ;
    	this.items.add(new InfoItem(this.lesson.getTime(), "",0,false)) ;
        //Salles
    	this.items.add(new TitleItem("Salle")) ;
    	this.items.add(new InfoItem(this.lesson.getRoom(), "",0,true)) ;
        //Enseignants
    	this.items.add(new TitleItem("Enseignant")) ;
    	this.items.add(new InfoItem(this.lesson.getTeacher(), "",0,true)) ;
        //Groupes
    	this.items.add(new TitleItem("Groupe")) ;
    	this.items.add(new InfoItem(this.lesson.getGroups(), "",0,false)) ;
        //Note de cours (affiche la section uniquement lorsqu'il y en a une)
    	if (!this.lesson.getNote().equals("")) {
	    	this.items.add(new TitleItem("Note")) ;
	    	this.items.add(new InfoItem(this.lesson.getNote(), "",0,false)) ;
    	}// if
        //Statut
    	this.items.add(new TitleItem("Statut")) ;
    	this.items.add(new InfoItem(this.lesson.getType().toString(), "",0,false)) ;
        //Date de création du cours
    	this.items.add(new TitleItem("Date de création")) ;
    	this.items.add(new InfoItem(this.lesson.getCreated(), "",0,false)) ;
    }// init()
	
	/**
	 * Représente un item de la liste.
	 * 
	 * @author	Schnell Michaël
	 */
	private abstract class Item {
		protected long itemId ;
		protected Item(long itemId) {
			super() ;
			this.itemId = itemId ;
		}// Item()
		protected abstract View getView(LayoutInflater layoutInflater, 
				ViewGroup parent) ;
		protected abstract boolean isEnabled() ;
		protected abstract String getInfo() ;
		protected long getItemId() {
			return this.itemId ;
		}// getItemId()
	}// class Item()

	/**
	 * Représente un item pour une information.
	 * 
	 * @author	Schnell Michaël
	 *
	 */
	private class InfoItem extends Item {
		protected String titre ;
		protected String sousTitre ;
		protected boolean enabled ;

		/**
		 * 
		 * @param titre
		 * @param sousTitre
		 * @param itemId
		 */
		protected InfoItem(String titre, String sousTitre, long itemId,
				boolean enabled) {
			super(itemId) ;
			this.titre = titre;
			this.sousTitre = sousTitre;
			this.enabled = enabled ;
		}// LessonItem(Lesson)
		
		/**
		 * {@inheritDoc}
		 * @see ade.prime.model.ListLessonAdapter.Item#getView()
		 */
		@Override
		protected View getView(LayoutInflater layoutInflater, ViewGroup parent) {
			View v = layoutInflater.inflate(R.layout.lesson_details_list_info, parent) ;

			TextView tv  = (TextView) v.findViewById(R.id.text) ;			
			tv.setText(this.titre) ;
			TextView tv2  = (TextView) v.findViewById(R.id.text2) ;			
			tv2.setText(this.sousTitre) ;

			return v ;
		}// getView()
		
		/**
		 * {@inheritDoc}
		 * @see ade.prime.model.ListLessonAdapter.Item#isEnabled()
		 */
		@Override
		protected boolean isEnabled() {
			return this.enabled ;
		}// isEnabled()

		@Override
		protected String getInfo() {
			return this.titre+"\n"+this.sousTitre;
		}

	}// class InfoItem

	private class TitleItem extends Item {
		protected String title ;
		protected TitleItem(String title) {
			super(-1) ;
			this.title = title ;
		}// TitleItem()
		/**
		 * {@inheritDoc}
		 * @see ade.prime.model.ListLessonAdapter.Item#getView()
		 */
		@Override
		protected View getView(LayoutInflater layoutInflater, ViewGroup parent) {
			View v = layoutInflater.inflate(R.layout.lesson_list_title_item, null) ;
			TextView titleView = (TextView) v.findViewById(R.id.title);
			titleView.setText(this.title) ;
			return v ;
		}// getView(LayoutInflater, ViewGroup)

		/**
		 * {@inheritDoc}
		 * @see ade.prime.model.ListLessonAdapter.Item#isEnabled()
		 */
		@Override
		protected boolean isEnabled() {
			return false ;
		}// isEnabled()
		@Override
		protected String getInfo() {
			return this.title;
		}
	}// class TitleItem
	
	private class ColorItem extends Item {
		protected String color ;
		protected ColorItem(String color) {
			super(-1) ;
			this.color = color ;
		}// TitleItem()
		/**
		 * {@inheritDoc}
		 * @see ade.prime.model.ListLessonAdapter.Item#getView()
		 */
		@Override
		protected View getView(LayoutInflater layoutInflater, ViewGroup parent) {
			View v = layoutInflater.inflate(R.layout.lesson_details_bandeau_color, null) ;
			TextView colorView = (TextView) v.findViewById(R.id.color);
			colorView.setBackgroundColor(Color.parseColor(this.color));
			return v ;
		}// getView(LayoutInflater, ViewGroup)

		/**
		 * {@inheritDoc}
		 * @see ade.prime.model.ListLessonAdapter.Item#isEnabled()
		 */
		@Override
		protected boolean isEnabled() {
			return false ;
		}// isEnabled()
		@Override
		protected String getInfo() {
			return this.color;
		}
	}// class TitleItem
	
}
